﻿using System;
using System.Windows.Forms;
using EvaluacionExalmarEntidades;
using EvaluacionExalmarLogicaNegocio;
using GlobalesUtilitarios;

namespace appEvaluacionExalmarMant
{
    public partial class frmEmpleado : Form
    {

        private Boolean _bNuevo;
        private Boolean _bCargado;

        public frmEmpleado()
        {
            InitializeComponent();
        }

        private void frmEmpleado_Load(object sender, EventArgs e)
        {
            try
            {
                dgvDirectorio.AutoGenerateColumns = false;
                CargarCargos();
                CargarGerencias();
                CargarEmpleados();
                _bNuevo = false;
                _bCargado = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, @"Evaluación de Personal", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void CargarEmpleados()
        {
            dgvDirectorio.DataSource = new Empleado().Listar(null);
            Generales.CellFormat(dgvDirectorio);
        }

        private void CargarGerencias()
        {
            cboGerencia.DataSource = new Gerencia().Listar(null);
            cboGerencia.ValueMember = "IdGerencia";
            cboGerencia.DisplayMember = "Descripcion";
            //cboGerencia.SelectedIndex = 1;
        }

        private void CargarAreas(int nGerencia)
        {
            cboArea.DataSource = new Area().Listar(new AreaInfo(null, null, nGerencia, null));
            cboArea.ValueMember = "IdArea";
            cboArea.DisplayMember = "Descripcion";
            //cboArea.SelectedIndex = -1;
        }

        private void CargarCargos()
        {
            cboCargo.DataSource = new Cargo().Listar(null);
            cboCargo.ValueMember = "IdCargo";
            cboCargo.DisplayMember = "Descripcion";
            //cboCargo.SelectedIndex = -1;
        }

        private void SeleccionarFila(int nFila)
        {
            txtID.Text = dgvDirectorio.Rows[nFila].Cells[0].Value.ToString();
            txtNombre.Text = dgvDirectorio.Rows[nFila].Cells[1].Value.ToString();
            txtApellidoPaterno.Text = dgvDirectorio.Rows[nFila].Cells[2].Value.ToString();
            txtApellidoMaterno.Text = dgvDirectorio.Rows[nFila].Cells[3].Value.ToString();
            txtDni.Text = dgvDirectorio.Rows[nFila].Cells[8].Value.ToString();

            int nEtapa = Int32.Parse(dgvDirectorio.Rows[nFila].Cells[7].Value.ToString());
            SeleccionaEtapa(nEtapa);

            cboCargo.SelectedValue = dgvDirectorio.Rows[nFila].Cells[9].Value;
            cboGerencia.SelectedValue = dgvDirectorio.Rows[nFila].Cells[11].Value;
            cboArea.SelectedValue = dgvDirectorio.Rows[nFila].Cells[10].Value;

        }

        private void SeleccionaEtapa(int nEtapa)
        {
            switch (nEtapa)
            {
                case 1:
                    rbEtapa1.Checked = true;
                    rbEtapa2.Checked = false;
                    rbEtapa3.Checked = false;
                    rbEtapa4.Checked = false;
                    break;
                case 2:
                    rbEtapa2.Checked = true;
                    rbEtapa1.Checked = false;
                    rbEtapa3.Checked = false;
                    rbEtapa4.Checked = false;
                    break;
                case 3:
                    rbEtapa3.Checked = true;
                    rbEtapa1.Checked = false;
                    rbEtapa2.Checked = false;
                    rbEtapa4.Checked = false;
                    break;
                case 4:
                    rbEtapa4.Checked = true;
                    rbEtapa1.Checked = false;
                    rbEtapa2.Checked = false;
                    rbEtapa3.Checked = false;
                    break;
            }
        }

        private void dgvDirectorio_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevo && _bCargado)
            {
                SeleccionarFila(nFila);
            }
        }

        private void dgvDirectorio_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevo && _bCargado)
            {
                SeleccionarFila(nFila);
            }
        }

        private void cboGerencia_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboGerencia.SelectedIndex > -1 && _bCargado)
            {
                int nGerencia = int.Parse(cboGerencia.SelectedValue.ToString());
                CargarAreas(nGerencia);
            }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            txtNombre.Text = "";
            txtApellidoPaterno.Text = "";
            txtApellidoMaterno.Text = "";
            txtID.Text = "";
            txtDni.Text = "";
            rbEtapa1.Checked = false;
            rbEtapa2.Checked = false;
            rbEtapa3.Checked = false;
            rbEtapa4.Checked = false;
            txtNombre.Focus();
            dgvDirectorio.Enabled = false;
            _bNuevo = true;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            txtNombre.Text = "";
            txtApellidoPaterno.Text = "";
            txtApellidoMaterno.Text = "";
            txtID.Text = "";
            txtDni.Text = "";
            rbEtapa1.Checked = false;
            rbEtapa2.Checked = false;
            rbEtapa3.Checked = false;
            rbEtapa4.Checked = false;
            txtNombre.Focus();
            dgvDirectorio.Enabled = true;
            _bNuevo = false;
        }

        private void btnGrabar_Click(object sender, EventArgs e)
        {
            int i;
            int? nId = int.TryParse(txtID.Text, out i) ? (int?)i : null;

            var sNombres = String.IsNullOrEmpty(txtNombre.Text) ? null : txtNombre.Text.Trim();
            var sApellidoPaterno = String.IsNullOrEmpty(txtApellidoPaterno.Text) ? null : txtApellidoPaterno.Text.Trim();
            var sApellidoMaterno = String.IsNullOrEmpty(txtApellidoMaterno.Text) ? null : txtApellidoMaterno.Text.Trim();
            var nCargo = (int?)(cboCargo.SelectedIndex == -1 ? null : cboCargo.SelectedValue);
            var nArea = (int?)(cboArea.SelectedIndex == -1 ? null : cboArea.SelectedValue);
            var sDni = String.IsNullOrEmpty(txtDni.Text) ? null : txtDni.Text.Trim();

            int? nEtapa = null;
            if (rbEtapa1.Checked)
                nEtapa = 1;
            if (rbEtapa2.Checked)
                nEtapa = 2;
            if (rbEtapa3.Checked)
                nEtapa = 3;
            if (rbEtapa4.Checked)
                nEtapa = 4;

            if (!nId.HasValue && !_bNuevo)
            {
                MessageBox.Show(@"Debe seleccionar un empleado a actualizar", @"Evaluación de Personal", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (sNombres == null)
            {
                MessageBox.Show(@"Debe ingresar el nombre del empleado", @"Evaluación de Personal", MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
                return;
            }

            if (sApellidoPaterno == null)
            {
                MessageBox.Show(@"Debe ingresar el apellido paterno del empleado", @"Evaluación de Personal", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (sApellidoMaterno == null)
            {
                MessageBox.Show(@"Debe ingresar el apellido materno del empleado", @"Evaluación de Personal", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (sDni == null)
            {
                MessageBox.Show(@"Debe ingresar el DNI del empleado", @"Evaluación de Personal", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (!nEtapa.HasValue)
            {
                MessageBox.Show(@"Debe seleccionar la etapa de contribución del empleado", @"Evaluación de Personal", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (!nCargo.HasValue)
            {
                MessageBox.Show(@"Debe seleccionar el cargo del empleado", @"Evaluación de Personal", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }
            if (!nArea.HasValue)
            {
                MessageBox.Show(@"Debe seleccionar el área del empleado", @"Evaluación de Personal", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            var oEmpleado = new EmpleadoInfo(nId, sNombres, sApellidoPaterno, sApellidoMaterno, null, null, nArea, null, nCargo, null, nEtapa, sDni);

            if (_bNuevo)
            {
                if (new Empleado().Registrar(oEmpleado))
                {
                    MessageBox.Show(@"Empleado registrado con éxito", @"Evaluación de Personal", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);

                    dgvDirectorio.DataSource = new Empleado().Listar(null);
                    Generales.CellFormat(dgvDirectorio);
                    _bNuevo = false;
                    dgvDirectorio.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo registrar al empleado", @"Evaluación de Personal", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                if (new Empleado().Actualizar(oEmpleado))
                {
                    MessageBox.Show(@"Empleado actualizado con éxito", @"Evaluación de Personal", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);

                    dgvDirectorio.DataSource = new Empleado().Listar(null);
                    Generales.CellFormat(dgvDirectorio);
                    _bNuevo = false;
                    dgvDirectorio.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo actualizar al empleado", @"Evaluación de Personal", MessageBoxButtons.OK,
                    MessageBoxIcon.Exclamation);
                }
            }
        }

        private void dgvDirectorio_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila > -1)
            {
                //MessageBox.Show(dgvDirectorio.Rows[nFila].Cells[0].Value.ToString());
                var frmJerarquia = new frmJerarquia()
                    {
                        OEmpleado =
                            new EmpleadoInfo(Int32.Parse(dgvDirectorio.Rows[nFila].Cells[0].Value.ToString()), null, null,
                                             null, null, null, null, null, null)
                    };
                frmJerarquia.ShowDialog();
            }
        }
    }
}
